package com.hyt.it.ogt.ykcj.common.enums.zs;

import com.hyt.check.ruler.Ruler;
import com.hyt.check.ruler.summary.LongRuler;
import com.hyt.check.ruler.summary.ObjRuler;
import com.hyt.check.ruler.summary.StrRuler;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 导入参数检查类型
 * 0、NONE：不检查，
 * 1、TEXT：文本检查，
 * 2、NUMBER：数字检查，
 * 3、ID_CARD：证件号检查（主：此检查会跟随IdCardType一同联动，如无Type则直接校验大陆身份证），
 * 4、DATE：日期检查,
 *
 * @author liying
 */
@Getter
@AllArgsConstructor
public enum ImportCheckTypeEnums {

    NONE(0, "NONE", "不检查", new Ruler[]{ObjRuler.none()}),
    TEXT(1, "TEXT", "文本检查", new Ruler[]{StrRuler.notBlank()}),
    NUMBER(2, "NUMBER", "数字检查", new Ruler[]{LongRuler.notNull()}),
    ID_CARD(3, "ID_CARD", "证件号检查", new Ruler[]{StrRuler.notBlank()}),
    DATE(4, "DATE", "日期检查", new Ruler[]{StrRuler.notEmpty(), StrRuler.convertDate()}),
    ;

    private final Integer code;
    private final String type;
    private final String desc;
    private final Ruler<?>[] ruler;

    public static ImportCheckTypeEnums getByCode(Integer code) {
        for (ImportCheckTypeEnums importCheckTypeEnums : values()) {
            if (importCheckTypeEnums.getCode().equals(code)) {
                return importCheckTypeEnums;
            }
        }
        return NONE;
    }

    public static Ruler[] getRulerByCode(Integer code) {
        return getByCode(code).getRuler();
    }
}
